package hacky.filebased.agent;

import static junit.framework.Assert.assertTrue;

import java.io.File;

import org.junit.After;
import org.junit.Test;

public class FileUtilitiesTest {
    private static final String TEMP_DIR_NAME = "TEMP_DIR";

    @After
    public void removeTempDirectory() {
        File tempDirecotry = new File(TEMP_DIR_NAME);
        FileUtilities.clearAllFiles(tempDirecotry);
        tempDirecotry.delete();
    }

    @Test
    public void tempDirectoryExistsAsFileIsRemovedAndRecreatedAsDirectory()
            throws Exception {
        createFileNamed(TEMP_DIR_NAME);
        FileUtilities.createTemporaryDirectory(TEMP_DIR_NAME);
        tempDirExistsAndIsDirectory();
    }

    @Test
    public void tempDirectoryExistsAsDirectoryThatIsEmptyAndIsRecreatedAsEmptyDirectory()
            throws Exception {
        createTempDirectory();
        FileUtilities.createTemporaryDirectory(TEMP_DIR_NAME);
        tempDirExistsAndIsDirectory();
    }

    @Test
    public void tempDirectoryExistsAsDirectoryWithFilesAndIsRecreatedAsEmptyDirectory()
            throws Exception {
        createTempDirectory();
    }

    private void createFileNamed(String name) throws Exception {
        FileUtilities.writeClassFile(new File("."), name, new byte[] {});
    }

    private void tempDirExistsAndIsDirectory() {
        File tempDirectory = new File(TEMP_DIR_NAME);
        assertTrue(tempDirectory.exists());
        assertTrue(tempDirectory.isDirectory());
    }

    private void createTempDirectory() {
        File tempDirectory = new File(TEMP_DIR_NAME);
        tempDirectory.mkdir();
    }

}
